<?php
require_once(APPPATH.'classes/abstract/udbase.php');
require_once(APPPATH.'classes/abstract/udentity.php');
require_once(APPPATH.'classes/util/udutil.php');
require_once(APPPATH.'classes/local_entrega.php');

class Cliente extends UDEntity {
	
	protected $cod_cliente_auto;
	protected $cpf_cliente;
	protected $email_cliente;	
	protected $senha_cliente;
	protected $nome;
	protected $telefone;
	protected $celular;
	protected $data_nascimento;
	protected $data_cadastro;
	protected $cliente_bloqueado;
	protected $data_ativacao;

	public function __construct( $idOrEmail = ''){
		parent::__construct();
		
		// Acesso
		$this->email_cliente = '';
		$this->senha_cliente = '';
		
		// Cadastro
		$this->cod_cliente_auto = '';
		$this->cpf_cliente      = '';
		$this->nome             = '';
		$this->data_nascimento  = '';
		$this->data_cadastro    = '';
		$this->data_ativacao    = '';
		
		// Contato
		$this->celular  = '';
		$this->telefone = '';
		
		// Sistema
		$this->cliente_bloqueado = '';

		// Endereço
		$this->cod_cidade_auto = '';
		$this->endereco 	   = '';
		$this->bairro 		   = '';
		$this->numero 		   = '';
		$this->cep 			   = '';
		$this->obs 			   = '';

		if(!empty($idOrEmail)){
			$this->carregar($idOrEmail);
		}
	}

	public function isBloqueado(){
		return $this->cliente_bloqueado;
	}

	public function ativarCadastro(){
		echo 'passa denovo. ' . date('Y-m-d');
		$this->data_ativacao = date('Y-m-d');
	}

	public function isAtivo(){
		return !empty($this->data_ativacao) && $this->data_ativacao != "0000-00-00";
	}

	public function hasID(){
		return !empty($this->cod_cliente_auto) && $this->cod_cliente_auto > 0;
	}

	public function comparePassword($pwd){
		return $this->decodePassword($this->getSenha()) == $pwd;
	}

	public function encodePassword($pass){
		$this->CI->load->library('encrypt');
		return $this->CI->encrypt->encode($pass);
	}

	private function decodePassword($pass){
		$this->CI->load->library('encrypt');
		return $this->CI->encrypt->decode($pass);
	}	

	public function carregar($idOrEmail){
		if (is_numeric($idOrEmail)){
			$this->CI->db->where('cod_cliente_auto', $idOrEmail);
		}else{
			$this->CI->db->where('email_cliente', $idOrEmail);
		}

		$query = $this->CI->db->get('cliente');

		if($query && $query->num_rows() == 1){
			foreach ($query->result() as $cli) {
				$this->cod_cliente_auto  = $cli->cod_cliente_auto;
				$this->email_cliente 	 = $cli->email_cliente;
				$this->senha_cliente 	 = $cli->senha_cliente;
				$this->cpf_cliente 		 = $cli->cpf_cliente;
				$this->nome 			 = $cli->nome;
				$this->data_nascimento 	 = $cli->data_nascimento;
				$this->data_cadastro 	 = $cli->data_cadastro;
				$this->celular 			 = $cli->celular;
				$this->telefone 		 = $cli->telefone;
				$this->cliente_bloqueado = $cli->cliente_bloqueado;
				$this->data_ativacao	 = $cli->data_ativacao;
			}
		}
	}

	public function gravar(){
		$validacao = $this->validar();

		if ($validacao[0]){
			if(!empty($this->cod_cliente_auto)){

				//Update
				$dados_cliente = array(
					'cod_cliente_auto'  => $this->getCodCliente(),
					'email_cliente' 	=> $this->getEmail(),
					'senha_cliente' 	=> $this->getSenha(),
					'cpf_cliente' 		=> $this->getCPF(),
					'nome' 				=> $this->getNome(),
					'data_nascimento' 	=> $this->getDataNascimento(),
					'data_cadastro' 	=> $this->getDataCadastro(),
					'celular' 			=> $this->getCelular(),
					'telefone' 			=> $this->getTelefone(),
					'cliente_bloqueado' => $this->getClienteBloqueado(),
					'data_ativacao'     => $this->data_ativacao
					);

				$this->CI->db->where('cod_cliente_auto', $this->cod_cliente_auto);
				$this->CI->db->update('cliente', $dados_cliente);

				//$dados_local_entrega = array(
				//	'cod_cliente_auto'  => $this->getCodCliente(),
				//	'cod_cidade_auto' 	=> $this->getCodCidade(),
				//	'endereco' 			=> $this->getEndereco(),
				//	'numero' 			=> $this->getNumero(),
				//	'bairro' 			=> $this->getBairro(),
				//	'cep' 				=> $this->getCEP(),
				//	'obs'               => $this->getObs()
				//);

			}else{
				$dados_cliente = array(
					'cpf_cliente' 		=> $this->getCPF(),
					'email_cliente' 	=> $this->getEmail(),
					'senha_cliente' 	=> $this->getSenha(),
					'nome'				=> $this->getNome(),
					'telefone' 			=> $this->getTelefone(),
					'celular' 			=> $this->getCelular(),
					'data_nascimento'   => $this->getDataNascimento(),
					'data_cadastro' 	=> $this->getDataCadastro(),
					'cliente_bloqueado' => 0// POR PADRÃO QUANDO SE CADASTRA NÃO É BLOQUEADO $this->getClienteBloqueado()
					);

				$query = $this->CI->db->insert('cliente', $dados_cliente);
				$this->setCodCliente($this->CI->db->insert_id());
				
				/*$localEntrega = new localEntrega();
				$localEntrega->setCodCliente();
				$localEntrega->setCodCidade();
				$localEntrega->setDescLocal();
				$localEntrega->setEndereco();
				$localEntrega->setNumero();
				$localEntrega->setBairro();
				$localEntrega->setCEP();
				$localEntrega->setOBS();
				cod_cliente_auto'   => $this->getCodCliente(),
				cod_cidade_auto'    => $this->getCodCidade(),
				desc_local_entrega' => $this->getDescLocal(),
				endereco'           => $this->getEndereco(),
				numero'             => $this->getNumero(),
				bairro'             => $this->getBairro(),
				cep'                => $this->getCEP(),
				obs'                => $this->getOBS()*/

				$dados_local_entrega = array(
					'cod_cliente_auto'   => $this->getCodCliente(),
					'cod_cidade_auto' 	 => $this->getCodCidade(),
					'endereco' 			 => $this->getEndereco(),
					'numero' 			 => $this->getNumero(),
					'bairro' 			 => $this->getBairro(),
					'cep' 				 => $this->getCEP(),
					'obs'                => $this->getObs(),
					'desc_local_entrega' => ''// $this->getDescLocal()
					);

				$query = $this->CI->db->insert('local_entrega', $dados_local_entrega);
				$this->cod_local_auto = $this->CI->db->insert_id();

				$this->enviarConfirmacao();
			}			
		}

		return $validacao;
	}

	public function validar(){
		$validacao = array(true,'');

		if(!empty($this->cod_cliente_auto)){
			//update
		}else{
			//insert
			$this->CI->db->from('cliente');
			$this->CI->db->where('email_cliente', $this->getEmail());
			if($this->CI->db->count_all_results() > 0){
				$validacao = array(false, 'E-mail já cadastrado em nosso sistema.');
			}

	    	$this->CI->db->from('cliente');
			$this->CI->db->where('cpf_cliente', $this->getCPF());
			if($this->CI->db->count_all_results() > 0){
				$validacao = array(false, 'CPF já cadastrado em nosso sistema.');
			}
		}

		return $validacao;
	}

	public function enviarConfirmacao(){
		$this->CI->load->helper('text');

        $html_email = ascii_to_entities($this->htmlConfirmacao());

        $this->CI->load->library('email', $this->CI->config->item('ud_emailconfig'));
        $this->CI->email->set_newline('\r\n');
        $this->CI->email->from($this->CI->config->item('ud_emailfromemail'), $this->CI->config->item('ud_emailfromname'));
        $this->CI->email->to($this->getEmail());
        $this->CI->email->subject('Confirmação de Cadastro Universo Delivery');
        $this->CI->email->message($html_email);
        $this->CI->email->send();       
	}

	private function htmlConfirmacao(){
        $this->CI->load->library('encrypt');
        $chave = $this->CI->encrypt->encode($this->cod_cliente_auto);
        
        $html = '';
        $html .= '<table style="width:600px;" cellspacing="0" cellpadding="0">';
        $html .= '  <tr>';
        $html .= '      <td style="width:230px; text-align:left; border-bottom:1px solid #ccc;">';
        $html .= '          <img src="'.base_url('assets/images/logo.png').'" alt="Universo Delivery" />';
        $html .= '      </td>';
        $html .= '      <td style="text-align:left; font-family: Arial, Helvetica, sans-serif; font-size:22px; color:gray; border-bottom:1px solid #ccc;">';
        $html .= '          Confirmação de Cadastro';
        $html .= '      </td>';
        $html .= '  </tr>';
        $html .= '  <tr>';
        $html .= '      <td colspan="2">';
        $html .= '          <div style="font-family: Arial, Helvetica, sans-serif; font-size:12px; padding-top:15px;">';
        $html .= '              Olá,';
        $html .= '              Recebemos seu cadastro no <strong>Universo Delivery</strong>.';
        $html .= br() . br();
        $html .= '              Para confirmá-lo, acesse o endereço abaixo:';
        $html .= '              ';
        $html .= '              <div style="padding:10px; border:1px solid #ccc; word-break:break-all; background:#f0f0f0; margin:10px 0; text-align:center;">';
        $html .= '                  '.anchor('confirmation/cclient/'.$chave, site_url('confirmation/cclient/'.$chave));
        $html .= '              </div>';
        $html .= '          </div>';
        $html .= '      </td>';
        $html .= '  </tr>';
        $html .= '  <tr>';
        $html .= '      <td colspan="2" style="font-size:10px; padding:10px; border-top:1px solid #ccc; font-family:Arial, Helvetica, sans-serif; text-align:center;">';
        $html .= '          <strong>Universo Delivery</strong>, mata a fome rapidinho!';
        $html .= br();
        $html .= anchor('', site_url());
        $html .= '      </td>';
        $html .= '  </tr>';
        $html .= '</table>';

        return $html;
	}

	//
	// Getters and Setters
	//

	public function getCodCliente(){
		return $this->cod_cliente_auto;
	}
	public function setCodCliente($cod_cliente_auto){
		$this->cod_cliente_auto = $cod_cliente_auto;
	}

	public function getEmail(){
		return $this->email_cliente;
	}
	public function setEmail($email){
		$this->email_cliente = $email;
	}

	public function getSenha(){
		return $this->senha_cliente;
	}
	public function setSenha($senha){
		$this->senha_cliente = $this->encodePassword($senha);
	}

	public function getCPF(){
		return $this->cpf_cliente;
		//return UDUtil::mask(str_pad((string)$this->cpf_cliente, 11, STR_PAD_LEFT), '###.###.###-##');
	}
	public function setCPF($cpf){
		$this->cpf_cliente = str_replace('-', '', str_replace('.', '', $cpf));
	}

	public function getNome(){
		return $this->nome;
	}
	public function setNome($nome){
		$this->nome = $nome;
	}

	public function getDataNascimento(){
		return $this->data_nascimento;
	}

	public function getDataNascimentoFormatada(){
		list($ano, $mes, $dia) = explode('-', $this->data_nascimento);
		return $dia . '/' . $mes . '/' . $ano;
	}

	public function setDataNascimento($dataNascimento){
		$this->data_nascimento = $dataNascimento;
	}

	public function getDataCadastro(){
		return $this->data_cadastro;
	}
	public function setDataCadastro($DataCadastro){
		$this->data_cadastro = $DataCadastro;
	}

	public function getCelular(){
		return $this->celular;
	}
	public function setCelular($celular){
		$this->celular = $celular;
	}	

	public function getTelefone(){
		return $this->telefone;
	}
	public function setTelefone($telefone){
		$this->telefone = $telefone;
	}
	
	public function getClienteBloqueado(){
		return $this->cliente_bloqueado;
	}
	public function setClienteBloqueado($cliente_bloqueado){
		$this->cliente_bloqueado = $cliente_bloqueado;
	}

	/*public function getBloqueado(){
		return $this->bloqueado;
	}
	public function setBloqueado($bloqueado){
		$this->bloqueado = $bloqueado;
	}*/

	public function getCodCidade(){
		return $this->cod_cidade_auto;
	}
	public function setCidade($cod_cidade_auto){
		$this->cod_cidade_auto = $cod_cidade_auto;
	}

	public function getEndereco(){
		return $this->endereco;
	}
	public function setEndereco($endereco){
		$this->endereco = $endereco;
	}

	public function getBairro(){
		return $this->bairro;
	}
	public function setBairro($bairro){
		$this->bairro = $bairro;
	}	
	
	public function getNumero(){
		return $this->numero;
	}
	public function setNumero($numero){
		$this->numero = $numero;
	}

	public function getCEPFormatted(){
		return UDUtil::mask(str_pad((string)$this->cep, 8, STR_PAD_LEFT), '##.###-###');
	}	
	
	public function getCEP(){
		return $this->cep;
	}
	public function setCEP($cep){
		$this->cep = str_replace('-', '', str_replace('.', '', $cep));
	}

	public function getObs(){
		return $this->obs;
	}
	public function setObs($obs){
		$this->obs = $obs;
	}
}
